/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.folha.dao;

import br.com.folha.entity.Predio;
import br.com.folha.entity.Sala;
import br.com.folha.utilidades.HibernateUtil;
import java.io.Serializable;
import java.util.List;
import javax.persistence.NoResultException;
import org.hibernate.Criteria;
import org.hibernate.FetchMode;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author marceloml
 */
public class SalaDao implements Serializable{
    
    private static final long serialVersionUID = 1L; 
    private UnidadeDao unidadeDao = new UnidadeDao();
    
    public Sala getById(int id)
    { 
       Session sessao = HibernateUtil.getSessionFactory();
       Query query = sessao.createQuery("FROM Sala WHERE id = :id");               
       query.setParameter("id", id);        

       return (Sala) query.uniqueResult();
    }     
    
    public List<Sala> listaSala(Object t) {
        Session sessao = HibernateUtil.getSessionFactory();
        Criteria criteria = sessao.createCriteria(t.getClass());          
        List lista = criteria.list();
        sessao.close();
        return lista;      
    } 
    
    public List<Sala> listaSalaUnidade(Object t, Integer unidade) {
        Session sessao = HibernateUtil.getSessionFactory();
        Criteria criteria = sessao.createCriteria(t.getClass());  
        
        criteria.createAlias("predio", "p");
        
        criteria.add(Restrictions.eq("p.unidade", unidadeDao.getById(unidade)));
        
        List lista = criteria.list();
        sessao.close();
        return lista;      
    }    
    
    public Long consultaNome(String nome, Predio predio) {
        Session sessao = HibernateUtil.getSessionFactory();
        Long retorno;
        Query query  = sessao.createQuery("select count(*) as contador from Sala where nome=:pnome and predio=:ppredio");
        query.setParameter("pnome",nome);
        query.setParameter("ppredio",predio);
            try{
             retorno = (Long) query.list().get(0);
            }catch(NoResultException e){
                retorno=null;
            }finally{
                sessao.close();
            }
            return retorno;       
    }    
    
}
